package com.hrma.dao;

import com.github.pagehelper.Page;
import com.hrma.entity.Employee;
import com.hrma.entity.EmployeeDTO;
import com.hrma.entity.EmployeeVO;
import com.hrma.entity.SelectResult;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

@Mapper
public interface EmployeeMapper {
    void add(Employee data);

    void delete(int id);

    void update(Employee data);

    void updatePwd(Employee data);

    List<SelectResult> select();

    Page<Employee> getList(EmployeeDTO data);

    Employee getCurrentUser(Integer id);

    /**
     * 根据id或编号判断员工是否存在
     */
    boolean exist(@Param("id") Integer id,@Param("num") String num);

    /**
     * 根据员工编号和密码得到员工信息
     */
    Employee getEmployeeByNandP(Employee data);

    Integer getstate(Integer id);

    Integer getSalary(String num);

    List<EmployeeVO> getAllNumAndSalary(Integer state);

    /**
     * 得到所有员工编号 0:离职 1:出差 2:休假 3:在职
     */
//    List<String> getAllNum();

    /**
     * 得到所有当前在职员工编号
     */
//    List<String> getAllNumOfWorking();

    /**
     * 得到所有当前请假员工编号
     */
//    List<String> getAllNumOfLeave();

    /**
     * 得到所有当前出差职员工编号
     */
//    List<String> getAllNumOfTravel();

    /**
     * 得到所有上月在职员工编号,上月1号之后离职的,以及上月最后一天之前入职的
     */
    List<String> getAllNumByMonFirstDay(Date lastMonthFirstDate,Date lastMonthEndDate);

    /**
     * 得到上月在职员工信息
     */
    List<EmployeeVO> lastMonthAllNumAndSalary(Date lastMonthFirstDate,Date lastMonthEndDate);

    /**
     * 得到所有上月入职员工编号
     */
//    List<String> getAllNumOfInt(Date lastMonthFirstDate);

    boolean hasPower(@Param("employeeId") Integer employeeId,@Param("permission") Integer permission);

    /**
     * 判断员工是否是管理员
     */
    boolean isAdmin(String num);

    /**
     * 根据编号得到id
     */
    Integer getIdByNum(String num);

    /**
     * 根据id得到编号
     */
    String getNumById(Integer id);
}
